社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
面试题
注意:这是一道你需要回答**“能”或者“不能”**的题!
首先请观察下面的这段代码,然后请回答这段代码能不能通过编译?
type People interface {
Speak(string) string
}
type Student struct{}
func (stu *Student) Speak(think string) (talk string) {
if think == "sb" {
talk = "你是个大帅比"
} else {
talk = "您好"
}
return
}
func main() {
var peo People = Student{}
think := "bitch"
fmt.Println(peo.Speak(think))
}
代码分析:这段代码定义了 一个名为people的接口,它有一个Speak方法。
这段代码还定义了一个结构体Student,这份代码用指针接收者实现了People接口。下面的测试程序中peo是一个值类型的Student实例,不能传入到func (stu *Student) Speak(think string) (talk string)
作为参数。请看下面的代码:
或是这样:
这样:
IDE中的原有代码:
小结:(按图顺序)
package main
import (
"fmt"
"os"
"time"
)
type Logger interface {
consoleLog()
fileLog()
}
type User struct {
username string
password string
}
func (u User) consoleLog() {
t := time.Now()
fmt.Printf("用户创建成功! 用户名为:%s", u.username)
fmt.Printf("密码是:%sn", u.password)
fmt.Printf("创建完成时间:%d-%d-%d %d:%d:%dn", t.Year(),
t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second())
}
func (u User) fileLog() {
t := time.Now()
file, err := os.OpenFile("./"+u.username+".txt", os.O_RDWR|os.O_CREATE, 0766) // 如果有这个文件就打开没有就新建
if err != nil {
fmt.Println(err)
}
data := "用户创建成功! 用户名为:"+fmt.Sprintf("%sn", u.username)+"密码是:"+u.password+"n"+fmt.Sprintf("创建完成时间:%d-%d-%d %d:%d:%dn", t.Year(),
t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second())
_, _ = file.WriteString(data)
_ = file.Close()
}
func newUser(username, password string) User {
return User{
username,
password,
}
}
func createUser() {
var (
username string
password string
)
fmt.Print("请输入用户名:")
_, err := fmt.Scan(&username)
fmt.Print("请输入一个密码:")
_, err = fmt.Scan(&password)
if err != nil {
fmt.Println("输入错误!!ERROR:", err)
}
u := newUser(username, password)
u.consoleLog()
u.fileLog()
}
func main() {
createUser()
}
运行截图:
小结:练习题难度不大,但是让我了解了go中的文件的一些基本操作。题解完全原创,欢迎大家指点!
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!