Go(1)

生成二进制文件

go build helloworld.go

 

  • go的注释
//阿巴阿巴

 

命令行参数

// gop1.io/ch1/echo1
// echo1 输出其命令行参数
package main

import (
	"fmt"
	"os"
)

func main() {
	var s, sep string //1
	for i := 1; i < len(os.Args); i++ {//2
		s += sep + os.Args[i]
		sep = " "
	}
	fmt.Println(s)
}

//1用var 声明两个string变量,没有初始化就会是这个类型的空值

数字空值:0;字符串空值:"";

//2 := 短变量声明,会根据初始化的值给予合适的类型 ; 递增语句i++ 要注意的就不能j = i++ & --i

同时go语言中for是循环唯一的方式 但是有多种形态

第一版for

//一种for循环展示
for intialization(初始化); condition; post{
    //零个或多个语句
}

不同点的话,两边不要小括号,同时花括号是必需的(左边的花括号必须在post的后面!!!)

//intialization&post可以去掉
//就很像传统的while语句
for condition{
	//阿巴阿巴
}

当然也可以去掉condition

for {
    //用break&return终止
}

第二版for

for在字符串或slice数据上迭代

// gog1.io/ch1/echo2
// echo2输出去命令行参数
package main

import (
	"fmt"
	"os"
)

func main() {
	s, sep := "", ""
	for _, arg := range os.Args[1:] {
		s += sep + arg
		sep = " "
	}
	fmt.Println(s)
    //fmt.Println(os.Args[0])
}

//go不允许有无用的的临时变量,但是可以用空标识符_(下划线)

 

这几个声明是等价的

s :=""     //就喜欢短的,隐式  
var s string  //包级,显式,
var s =""
var string =""

 

 

// gog1.io/ch1/echo2
// echo2输出去命令行参数
package main

import (
	"fmt"
	"os"
	"strings"
)

func main() {
	fmt.Println(strings.Join(os.Args[1:], " "))
}

找出重复行

第一版dup

输出标准输入中出现次数大于1的行,前面是次数

// gop1.io/ch1/dup1
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	counts := make(map[string]int)
	input := bufio.NewScanner(os.Stdin)
	for input.Scan() {
		counts[input.Text()]++
	}
	//注意:忽略input.Err()中可能的错误
	for line, n := range counts {
		if n > 1 {
			fmt.Printf("%d\t%s\n", n, line)
		}
	}
}

map存储键/值对集合 例子中键是string类型 值是int类型 感觉想php的数组

这里的make 是用来新建map,还有别的用处

用for去迭代map 序列是不一定的

Scanner:扫描器

input := bufio.NewScanner(os.Stdin)用短声明新建一个bufio.Scanner类型的input

//counts[input.Text()]++等价
line :=input.Text()
counts[line]=counts[line]+1

工作流程:

imput.Scan()读取下一行->input.Text()获取读到的内容->Scan函数在读到新行的时候返回true,没有更多内容返回false

printf的格式化输出

%d            //十进制整数
%x;%o;%b      //十六进制、八进制、二进制整数
%f;%g;%e      //浮点数
%t            //布尔型 true false
%c            //字符  Unicode码点
%s            //字符串
%q            //带引号的字符串或字符("abc"&"c")
%v            //内置格式的任何值
%T            //任何值的类型
%%            //百分号本身

println默认是用%v再追加\n

GO基本概念

转义字符

(换书了)

\b  退格
\f  换页
\n  
\r  回车
\t  水平制表符
\v  垂直制表符

赋值

c&=2
c|=2

枚举

关键字 iota

 

 

变量

s :="" //就喜欢短的,隐式

var s string //包级,显式,

var s =""

var string =""

上面的

匿名变量

局部变量声明后必须使用,全局变量可以声明后不使用

package main

import (
	"fmt"
)

func main() {
	a := 1000
	fmt.Print("hello world")
}
//报错:
// a declared and not used

空标识符_(下划线)

 

 

init函数

可以在init中全局声明 执行优先级高于main 不能手动调用init函数 每一个源文件只能有一个init函数

package main

import (
    "fmt"
    "math"
)

var Pi float64

func init() {
    Pi = 4 * math.Atan(1)
}
func main() {
    DPi := Pi * Pi
    fmt.Println(Pi, DPi)
}

基础数据类型

 

 

浮点型

float32精确到小数后7位,float64精确到小数后15位,所以要注意==和!=的使用

math包中都要求接收float64,所以尽量有float64

复数

a+bi(a和b都是实数,类型为浮点数)的数叫复数

complex64 //32位实数和虚数

complex128 //64位实数和虚数

隐式声明的复默认为complex128类型

real()&imag()分别可以用来获取实部和虚部的数值

字符串&字符

len()返回一个字符串的字节数

非解释字符

用反引号括起来,支持换行

package main

import (
	"fmt"
)

func main() {
	str1 := `123\n123
	123`
	str2 := "321\n321"
	fmt.Println(str1)
	fmt.Println(str2)
}
/*
123\n123
	123
321
321
*/

字符串比大小是看第一个字节的

遍历字符串的区别

package main

import (
	"fmt"
)

func main() {
	str := "我是字符串"
	for i := 0; i < len(str); i++ {
		fmt.Printf("%v ", str[i])
		//fmt.Println(str[i])
	}
	fmt.Println("\n------------------------------")
	for i := 0; i < len(str); i++ {
		fmt.Printf("%c", str[i])
	}
	fmt.Println("\n------------------------------")
	for _, v := range str {
		fmt.Printf("%c", v)
	}

}

 

 

字符串修改

[]byte&[]rune

 

 

 

 

strings包

 

 

strings.HasPrefix(str,"x") 查找字符串前缀是否有x
strings.HasSuffix(str,"x") 查找字符串后缀是否有x
strings.Contatins(str,"x") 查找字符串中是否有x
strings.ContatinsAny(str,"x")

 

 

定位

strings.index(str,"abc") 返回x第一次出现的位置
strings.LastIndex(str,"x")返回x最后一次出现的位置
没有就返回-1
非ascii码:
strings.IndexRune(str,"x")

替换

strings.Replace(str,old,new,n)

__EOF__

本文作者Map1eaf
本文链接https://www.cnblogs.com/Map1eaf/p/17218192.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Map1eaf  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示