Day01 周作业
-
Golang是编译型语言还是解释性语言 编译型
-
位和字节的关系? 1Byte = 8bit
-
uint8类型占有几个字节,取值范围是多少?
答:占1个字节,因为uint8中的8代表8位,可代表的int值有 2的8次方即256个,因为uint8取非负,所以取值范围为 0-255
- go build的功能是?go run的功能是?
个人理解:
(1) go build 会将命令执行位置目录下的文件名后缀为.go的文件编译为可执行文件(Windows系统是.exe, Mac系统是Unix),同时在执行时可以通过 -o 参数指定编译后生成的可执行文件的文件名
(2) go run 则是对目录下对应的go文件进行编译+运行,所以同一环境下,go run的速度是要比慢于 go build的
注意事项:
在使用go build时,是将go文件对应的依赖文件一起打包的(这也是可执行文件的文件大小比go文件的大小大很多的原因),生成的可执行文件在其他没有go语言环境的机器也是可以执行的,但是go run依赖本地的go环境,使用时机器上必须有对应的go环境。
- 程序中变量名命名不正确的是(多选)ABCD
A true
B _ xyz
C 2a
D $abc
- 声明赋值变量可以用var,比如var name = "yuan",还可以不使用var的简洁声明赋值方式是?
name := "yuan"
- s := "hello golang",将字符串s中的golang字符串切片出来
package main
import (
"fmt"
"strings"
)
func getString(s string)(ret string){ // 获取golang
retSlice := strings.Split(s," ")
ret = retSlice[1]
return // 返回值的变量名与定义的返回值变量名相同,因此省略ret
}
func main() {
s := "hello golang" // 待提取字符
ret := getString(s)
fmt.Println(ret) // golang
}
- 将"北京 上海 广州 深圳"转换为 "北京,上海,广州,深圳"
package main
import (
"fmt"
"strings"
)
func main() {
s := "北京 上海 广州 深圳"
// 实现方式1
ret := strings.Replace(s," ",",",strings.Count(s," "))
fmt.Println(ret) //北京,上海,广州,深圳
// 实现方式2
retSlice := strings.Split(s," ")
ret2 := strings.Join(retSlice,",")
fmt.Println(ret2) //北京,上海,广州,深圳
}
- 基于字符串操作获取用户名和密码s := "mysql ... -u root -p 123" ,并判断用户名和密码是否是“yuan”和123,获取布尔值。
package main
import (
"fmt"
"strings"
// "reflect"
// "regexp"
)
func main() {
s := "mysql ... -p123 -uroot"
// 有个值得注意的地方,登录命令 -u和-p也可以是一后一前,且 -u或者-p后面可以没有空格,直接跟用户名或者密码
// 因此先判断出 -u 在前还是 -p在前
userNameIndex := strings.Index(s,"-u")
pwdIndex := strings.Index(s,"-p")
fmt.Println(userNameIndex,pwdIndex)
var username string
var pwd string
// 思路: -u和-p的前后位置确定之后,可以通过split切片的方式拿到信息
if (userNameIndex < pwdIndex){ // -u 在前
infoStr := s[userNameIndex+2:] // 此时infostr 已经包含username 和 pwd,由-p将它们分割
username, pwd = strings.Split(infoStr,"-p")[0],strings.Split(infoStr,"-p")[1]
// 去除空格,拿到值
username, pwd = strings.TrimSpace(username),strings.TrimSpace(pwd)
}else{ //-p在前
infoStr := s[pwdIndex+2:]
username, pwd = strings.Split(infoStr,"-u")[1],strings.Split(infoStr,"-u")[0]
username, pwd = strings.TrimSpace(username),strings.TrimSpace(pwd)
}
fmt.Println(username,pwd)
fmt.Println(username == "yuan" && pwd == "123")
}
- 引导用户输入一个名字,判断改名字是否以小写a或者大写A开头,如果是打印true,否则打印false
package main
import (
"fmt"
"strings"
)
func main() {
var name string
fmt.Println("请输入名字:")
fmt.Scanln(&name)
var boolVal bool = strings.HasPrefix(name,"A") || strings.HasPrefix(name,"a")
fmt.Println(boolVal)
}