package main import ( "flag" "fmt" "strings" ) // 定义标识参数n ,如果为false , “第三个中的引号”表示解释,利于我们明白 var n = flag.Bool("n", false, "omit trailing newline") // 标识参数s 在空格处插入“第二个空格中的东西” 来分离"separator" var sep = flag.String("s", " ", "separator") //全局变量需要用var funcmain() { // 解析命令行中的信息 flag.Parse() // 解析命令行中的信息就可以通过args()中获得,args是参数的意思,arguments fmt.Print(strings.Join(flag.Args(), *sep))// 连接字符串 if !*n { fmt.Println() } } ----- 输出 PS F:\LearningGo> go run main.go a bc efg a bc efgeasy PS F:\LearningGo> go run main.go -s / a bc efg a/bc/efgeasy PS F:\LearningGo> go run main.go -n a bc efg a bc efg
new 函数
new() 函数用于创建一个指定类型的零值,并返回其地址
1 2 3 4 5 6
// 用指针接受 p := new (int ) fmt.Println(*p) --- 等价 var r int = 0 p = &r
因为最常见的变量类型都是结构体类型的,所以不推荐new
赋值
多重赋值(一次性赋值)
1 2 3 4 5 6 7 8 9 10 11
funcmain() { x := 1 y := 2 x, y = y, x fmt.Println(x, y) } 输出 2,1 //牛蛙 --- var x, y = 1,2 _ , x :=func()// 作为函数的接收
package main // 书上的代码只有两个包,这个包还是我自己造的,用来显示输出,看看我是否是否真正理解了这个代码,然后发现第一次就错了,因为没捋清楚其中的关系。 import ( "LearningGo/conv" "LearningGo/tempconv" "fmt" )
funcmain() { temp := conv.CToF(tempconv.Celsius(tempconv.FreeingC)) s := temp.String() fmt.Println(s) }
funcmae() { var s string fmt.Println(s, "F") fmt.Sprintf("%sF") } // 翻开后面一页发现有案例,尼玛,早知道不写了 /*后面的案例实现是 a , b 通过arg[1:]读取 f:=tempconv.Fahrenheit(a) 来显式转换 比我写的可操作性更强 还要注意其中的类型转化*/
作用域
1 2 3 4 5
if f,err:= os.open(file);err!= nil{ log.Println(err) } f.close() // 会显示出你f变量未定义